<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="author" content="lijinbo" />
    <title>254-项目版本检测-纯前端更新</title>
  </head>

  <body>
    <div class="box">
      <p>
        <a href="https://mp.weixin.qq.com/s/779HQ1xn9RcNVexVPL4xOw" target="_blank">
          纯前端怎么实现检测版本更新，请看这篇！
        </a>
      </p>
    </div>
    <script>
      let oldVersionTag = localStorage.getItem('versionTag') // 版本标识

      /**
       * 比较当前的 ETag 或 Last-Modified 值与最新获取的值
       */
      async function compareTag() {
        // 获取首页的 ETag 或 Last-Modified 值，作为当前版本标识
        const response = await fetch('/', { cache: 'no-cache' })
        const newVersionTag = response.headers.get('etag') || response.headers.get('last-modified')

        if (!oldVersionTag) {
          // 初次运行时，存储当前的 ETag 或 Last-Modified 值
          oldVersionTag = newVersionTag
          localStorage.setItem('versionTag', newVersionTag)
        } else if (oldVersionTag !== newVersionTag) {
          // 如果 ETag 或 Last-Modified 发生变化，则认为有更新
          return { type: 1, oldVersionTag, newVersionTag }
        }
        return { type: 0, oldVersionTag, newVersionTag }
      }

      compareTag().then((res) => {
        if (res.type) {
          // 有更新
          console.log('有更新', res)
        } else {
          // 没更新
          console.log('没更新', res)
        }
      })
    </script>
  </body>
</html>
